package invoker;

import java.awt.EventQueue;

import javax.swing.JFrame;

import java.awt.Color;

import javax.swing.JButton;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JPanel;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;

import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;

import javax.swing.JTextArea;
import javax.swing.event.CaretListener;
import javax.swing.event.CaretEvent;
import javax.swing.JTextPane;
import javax.swing.JScrollPane;

import java.awt.Font;
import java.util.Observable;
import java.util.Observer;

public class IhmImpl  implements Ihm, Observer{
	
	
	

	private JFrame miniEditeurV1;
	private JPanel panneauBoutons;
	/**
	 * Attribut de couper
	 */
	private JButton btnCouper;
	/**
	 * Attribut de copier
	 */
	private JButton btnCopier;
	/**
	 * Attribut de coller
	 */
	private JButton btnColler;
	/**
	 * Attribut de saisirTexte.
	 * Attribut de selection
	 * C'est à travers cet attribut qu'on va récupérer
	 * le texte à insérer dans le buffer mais aussi
	 * la selection (soit début et fin).
	 */
	private JTextArea txtrInserertexte;
	/**
	 * Cet attribut va juste nous afficher le contenu du buffer.
	 */
	private JTextArea txtrContenuDeLediteur;
	private JTextPane txtpnReponse;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					IhmImpl window = new IhmImpl();
					window.miniEditeurV1.setVisible(true);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	/**
	 * Create the application.
	 */
	public IhmImpl() {
		initialize();
	}

	/**
	 * Initialize the contents of the frame.
	 */
	private void initialize() {
		miniEditeurV1 = new JFrame();
		miniEditeurV1.setBackground(new Color(240, 240, 240));
		miniEditeurV1.setTitle("Mini-éditeur V1");
		miniEditeurV1.setBounds(100, 100, 450, 406);
		miniEditeurV1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		panneauBoutons = new JPanel();

		txtpnReponse = new JTextPane();
		txtpnReponse.setFont(new Font("Algerian", Font.BOLD, 18));
		txtpnReponse.setForeground(new Color(0, 0, 0));
		txtpnReponse.setEditable(false);
		txtpnReponse.setBackground(Color.GRAY);
		txtpnReponse.setText("Réponse");
		
		JScrollPane scrollPaneInsererTexte = new JScrollPane();
		
		JScrollPane scrollPaneContenuEditeur = new JScrollPane();
		
		GroupLayout groupLayout = new GroupLayout(miniEditeurV1.getContentPane());
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.TRAILING)
				.addComponent(panneauBoutons, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE)
				.addComponent(scrollPaneInsererTexte, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE)
				.addComponent(scrollPaneContenuEditeur, GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE)
				.addComponent(txtpnReponse, GroupLayout.DEFAULT_SIZE, 434, Short.MAX_VALUE)
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addComponent(panneauBoutons, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addGap(18)
					.addComponent(scrollPaneInsererTexte, GroupLayout.PREFERRED_SIZE, 123, GroupLayout.PREFERRED_SIZE)
					.addGap(20)
					.addComponent(scrollPaneContenuEditeur, GroupLayout.DEFAULT_SIZE, 99, Short.MAX_VALUE)
					.addGap(18)
					.addComponent(txtpnReponse, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addGap(26))
		);
		
				txtrContenuDeLediteur = new JTextArea();
				txtrContenuDeLediteur.setText("Contenu de l'éditeur");
				scrollPaneContenuEditeur.setViewportView(txtrContenuDeLediteur);
				txtrContenuDeLediteur.setEditable(false);
				//txtrContenuDeLediteur.setText("Contenu de l'éditeur");
		
				txtrInserertexte = new JTextArea();
				scrollPaneInsererTexte.setViewportView(txtrInserertexte);
				txtrInserertexte.addCaretListener(new CaretListener() {
					public void caretUpdate(CaretEvent arg0) {
						debutSelection = arg0.getDot();
						finSelection = arg0.getMark();
						if(debutSelection != finSelection){		
							txtpnReponse.setText("Text selected is "+txtrInserertexte.getSelectedText()+" [dot: "+debutSelection+",mark: "+finSelection+"]");
							//System.out.println("Bonjour le monde");
							/**
							 * Emplacement de l'exécution de la commande Selectionner.
							 */
						}
						else txtpnReponse.setText("Text not selected");
					}
				});
				txtrInserertexte.addKeyListener(new KeyAdapter() {
					@Override
					public void keyReleased(KeyEvent e) {
						texteInserer = txtrInserertexte.getText();
						txtrContenuDeLediteur.setText(texteInserer);
					}
					@Override
					public void keyTyped(KeyEvent e) {
						texteInserer = txtrInserertexte.getText();
						txtrContenuDeLediteur.setText(texteInserer);
					}
				});

		btnCouper = new JButton("Couper");
		btnCouper.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				/**
				 * Emplacement de l'exécution de la commande couper
				 */
				System.out.println("Commande Couper");
			}
		});
		panneauBoutons.add(btnCouper);

		btnColler = new JButton("Coller");
		btnColler.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				/**
				 * Emplacement de l'exécution de la commande coller
				 */
				System.out.println("commande coller");
			}
		});
		panneauBoutons.add(btnColler);

		btnCopier = new JButton("Copier");
		btnCopier.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			   
				/**
				 * Emplacement de l'exécution de la commande coller
				 */
				 
				
				System.out.println("Command Copier");
			}
		});
		panneauBoutons.add(btnCopier);
		miniEditeurV1.getContentPane().setLayout(groupLayout);
	}

	/**
	 * Début de la sélection
	 */
	private int debutSelection;
	/**
	 * Fin de la sélection
	 */
	private int finSelection;
	/**
	 * Le texte à insérer dans le buffer.
	 */
	private String texteInserer;

	/**
	 * Getter qui sera utilisé dans la classe "Selectionner" 
	 * @return le début de la selection
	 */
	@Override
	public int getDebutSelection() {
		return debutSelection;
	}

	public void setDebutSelection(int debutSelection) {
		this.debutSelection = debutSelection;
	}

	/**
	 * Getter qui sera utilisé dans la classe "Selectionner" 
	 * @return la fin de la selection
	 */
	@Override
	public int getFinSelection() {
		return finSelection;
	}

	public void setFinSelection(int finSelection) {
		this.finSelection = finSelection;
	}

	/**
	 * Getter qui sera utilisé dans la classe "SaisirTexte"
	 * @return le texte à insérer dans le buffer.
	 */
	@Override
	public String getTexteInserer() {
		return texteInserer;
	}

	public void setTexteInserer(String texteInserer) {
		this.texteInserer = texteInserer;
	}

	@Override
	public void update(Observable arg0, Object arg1) {
		// TODO Auto-generated method stub
		
	}
}
